In computing, virtualization generally refers to the process of creating a virtual machine (VM), which is a software-based abstraction or emulation of a physical computer. A VM can be a full representation of a real physical computer, including a virtual representation of the hard drive (referred to herein as a virtual disk or a virtual machine disk (VMDK)), and the VM can run a full instance of a complete operating system (referred to as a “guest” operating system), such as Microsoft Windows. A physical computer typically executes one or more VMs using virtualization software called a hypervisor. The physical computer on which the hypervisor is running is usually referred to as the “host” computer, while the individual VMs are referred to as “guests.”
Hypervisors can generally be classified into two categories—the type 1 or “native” hypervisors (also sometimes referred to as “bare metal” hypervisors) and the type 2 or “hosted” hypervisors. Native hypervisors run directly on the host computer's hardware and host multiple virtual machines that have individual guest operating systems. In contrast, hosted hypervisors are installed on a conventional host operating system (e.g., Windows, Linux, etc.) and thus hosted hypervisors represent a second layer of software above the hardware. The present disclosure is primarily relevant to hosted hypervisor environments, however this should not be viewed as a limitation since some of the techniques described herein may be applicable to native hypervisors as well.
Virtual machines provide great value to end users. Software developers often use local virtual machines to ease the research and development (R&D) process, leveraging local integrated development environment (IDE) integration for convenient debugging in an isolated environment, in which experimentation is safe. Quality assurance (QA) engineers use virtual machines for efficiently testing software and pushing it to its limits. Information Technology (IT) departments use virtual machines for testing software updates before mass deployment to end users and for reproducing issues. Mobile sales engineers and trainers use local virtual machines for demonstration purposes, allowing them to safely replay a live demonstration. Security professionals use virtual machines for investigating malware in a safe manner.
However, in most of these cases, the virtual machines are clean, unused machines that do not have the same characteristics as real-world end user machines. For example, these virtual machines typically would not have multiple applications installed, complex configurations or many user data files, as no real users have actually used these virtual machines as a primary desktop. Therefore, many of the virtualization benefits described above are lost: software developers and quality engineers may not be able to detect or investigate bugs that only occur on real-world machines; IT may only find out that a patch causes issues after it has been deployed to real users (and the damage is already done)—and would not be able to reproduce real user issues on a clean machine. Additionally, the creation of virtual machines for these purposes—even if only with a clean operating system and a few applications—is a time-consuming process that also requires significant amounts of storage capacity.
One solution to this problem would be to convert a real user's physical machine (e.g., laptop, personal computer, etc.) into a virtual machine clone. There are a number of situations in which this may be useful. For example, experienced “power” users could then use the virtual machine clone to safely troubleshoot issues or try software before they install it on their physical devices and potentially damage them. Developers could use the virtual machine clone to test and debug software on their own, real-world, desktops. Malware researchers and security professionals could use the virtual machine clone to investigate malware or to temporarily work in a safer sandboxed environment.
Currently, there exist some tools that provide the functionality to convert a physical device into a virtual machine clone. However, such tools typically require that all of the files on the physical machine be copied to the virtual machine, a process that could take a lengthy amount of time for a real-world machine and potentially require a lot of storage space on the target disk. For example, copying all of the content may take hours to complete and the user must have a huge amount of free space available (i.e., enough storage capacity to contain copies of all the content on the physical machine). Additionally, once the user has finished using the virtual machine clone, if the user wants to propagate some of their changes from the virtual machine back into the original physical device, they must do so manually—which is an error-prone and time-consuming process. A more efficient approach to creating a virtual machine clone of a physical computing device is desirable.